//--------------------------------------------------
// マイルストーン追加ダイアログ
//--------------------------------------------------

App.EventDlgIndex = function(config){
  // スーパークラスコンストラクタ呼び出し
  App.EventDlgIndex.superclass.constructor.call(this, config);
} ;

// App.ModalDialogを継承
Ext.extend(App.EventDlgIndex, App.ModalDialog, {
    //=============================
    // メンバー
    //=============================
    // オーバーライドメンバー
  width          :450,                   // ダイアログ幅
  height         :400,                   // ダイアログ高さ
  container      :"dlg_evt_edit",    // コンテナエレメントのID
    auto_loading   :true,

    // 独自メンバー
    newurl         : url_for("/event/dlg_new"),      // データ読込URL
    editurl        : url_for("/event/dlg_edit"),     // データ読込URL
    createurl      : url_for("/event/dlg_create"),    // 新規作成URL
    updateurl      : url_for("/event/dlg_update"),    // 更新URL
    destroyurl      : url_for("/event/dlg_destroy"),    // 削除URL
    responseobj    : null,
    projectusers   : null,
    resulthtml     : null,
  
    /*
     * 関数名：onDocLoaded
     * 概　要：ドキュメント読込完了イベント。
     *         該当ダイアログ内のエレメントに対し、イベント設定を行う
     * 引　数：なし
     * 戻り値：なし
     */
  onDocLoaded : function(){
      // 保存ボタンクリックイベント設定
    elm = Ext.get('dlg_evt_edit_save') ;
    elm.on('click', this.onSave, this, true) ;
        // 削除ボタンクリックイベント設定
        elm = Ext.get('dlg_evt_edit_destroy') ;
        elm.on('click', this.onDestroy, this, true) ;
      // 閉じるボタンクリックイベント設定
    elm = Ext.get('dlg_evt_edit_close') ;
    elm.on('click', this.onClose, this, true) ;
        //担当選択ボタンクリックイベント設定
        elm = Ext.get('dlg_evt_edit_euselect') ;
        elm.on('click', this.onEventUserSelect, this, true) ;
  },
  
    /*
     * 関数名：onSave
     * 概　要：保存ボタンクリックイベント。
     *         フォームの内容をAjax経由で登録要求する。
     * 引　数：なし
     * 戻り値：なし
     */
  onSave : function(){
      // 入力チェック
        if( !this.fncInputCheck() ) return false ;

        // 確認メッセージ表示
        var ret = confirm( app_localized_message("confirm", "save_confirm") ) ;
        if( !ret ) return false ;
            
    try{
        var url = "";
        if( document.getElementById('dlg_evt_edit_event_id').value == "" ){
          // 新規作成処理要求
          url = this.createurl ;
        }
        else{
          // 更新要求
          url = this.updateurl ;
        }

            // エレメントを生成
            this.fncFormSetProjectUsers() ;

      // 非同期リクエスト
      var options =
      {
        url: url,
        form: 'dlg_evt_edit_form',
        success: this.onSaveSuccess ,
        failure: this.onSaveFail,
        scope: this,
        method :'POST'
      } ;
      Ext.Ajax.request(options) ;

/*        
            // 非同期リクエスト
            app_loadingStart();
            var cbobj =
            {
                success: this.onSaveSuccess ,
                failure: this.onSaveFail,
                scope: this
            } ;
            YAHOO.util.Connect.setForm('dlg_evt_edit_form') ;
            YAHOO.util.Connect.asyncRequest(
                'POST',
                url,
                cbobj
            ) ;
*/
    } catch(e) {
      alert(e.message);
    }
    
        return false ;
  },

    /*
     * 関数名：onSaveSuccess
     * 概　要：保存処理成功イベント。
     *         処理成功時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onSaveSuccess : function(obj){
        var responseobj = Ext.util.JSON.decode(obj.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){
            this.responseobj = responseobj ;
            var resultobj = responseobj.result ;
            this.resulthtml = resultobj.resulthtml ;

            this.dialog.hide();
            // コールバック関数呼び出し
            this.fncExecCallback("on_save");
        }
        else{
            alert(message) ;
        }
//        app_loadingEnd();
    },
    
    /*
     * 関数名：onSaveFail
     * 概　要：保存処理失敗イベント。
     *         処理失敗時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onSaveFail : function(obj){
        alert(obj.responseText) ;
//        app_loadingEnd();
    },
    
    /*
     * 関数名：onDestroy
     * 概　要：削除ボタンクリックイベント。
     *         フォームの内容をAjax経由で削除要求する。
     * 引　数：なし
     * 戻り値：なし
     */
    onDestroy : function(){

        // 確認メッセージ表示
        var ret = confirm( app_localized_message("confirm", "destroy_confirm") ) ;
        if( !ret ) return false ;
            
        try{
            var url = this.destroyurl ;

      // 非同期リクエスト
      var options =
      {
        url: url,
        form: 'dlg_evt_edit_form',
        success: this.onDestroySuccess ,
        failure: this.onDestroyFail,
        scope: this,
        method :'POST'
      } ;
      Ext.Ajax.request(options) ;

/*
            // 非同期リクエスト
            app_loadingStart();
            var cbobj =
            {
                success: this.onDestroySuccess ,
                failure: this.onDestroyFail,
                scope: this
            } ;
            YAHOO.util.Connect.setForm('dlg_evt_edit_form') ;
            YAHOO.util.Connect.asyncRequest(
                'POST',
                url,
                cbobj
            ) ;
*/
        } catch(e) {
            alert(e.message);
        }
    
        return false ;
    },

    /*
     * 関数名：onDestroySuccess
     * 概　要：削除処理成功イベント。
     *         処理成功時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDestroySuccess : function(obj){
        var responseobj = Ext.util.JSON.decode(obj.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){
            this.responseobj = responseobj ;
            var resultobj = responseobj.result ;
            this.resulthtml = resultobj.resulthtml ;

            this.dialog.hide();
            // コールバック関数呼び出し
            this.fncExecCallback("on_destroy");
        }
        else{
            alert(message) ;
        }
//        app_loadingEnd();
    },
    
    /*
     * 関数名：onDestroyFail
     * 概　要：削除処理失敗イベント。
     *         処理失敗時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDestroyFail : function(obj){
        alert(obj.responseText) ;
    },
    
    /*
     * 関数名：onBeforeShow
     * 概　要：ダイアログ表示前イベント
     * 引　数：dlg                        YAHOO.ext.BasicDialog    ダイアログオブジェクト
     * 戻り値：なし
     */
    onBeforeShow : function( dlg ){
        this.fncDataLoad() ;
    },
        
    /*
     * 関数名：onClose
     * 概　要：閉じるボタンクリックイベント
     *         ダイアログを閉じる。
     * 引　数：なし
     * 戻り値：なし
     */
  onClose : function(){
     this.dialog.hide() ;
     // コールバック関数呼び出し
        this.fncExecCallback("on_close");
  },
  
    /*
     * 関数名：onEventUserSelect
     * 概　要：担当者ユーザー追加ボタンクリックイベント
     *         ユーザー選択ダイアログを表示する
     * 引　数：なし
     * 戻り値：なし
     */
    onEventUserSelect : function(){

        // パラメータハッシュ生成
        var initparam = {};

        initparam["base_id"] = "dlg_evt_edit_form" ;
        
        // データパラメータの設定
        initparam["dataparam"] = {};

        initparam["dataparam"]["initialdata"]= {};
        initparam["dataparam"]["initialdata"]["projectusers"] = this.projectusers ;

        // コールバックの設定
        initparam["on_select"] = [this.onEventUserSelect_Selected.createDelegate(this)];

        // タスク追加ダイアログ表示
        App.Page.thispage.dialogs.ProjectuserDlgSelect.fncShowDialog(initparam) ;
    },

    /*
     * 関数名：onEventUserSelect_Selected
     * 概　要：担当者ユーザー追加ボタンクリックイベント
     *         選択ユーザーを担当者リストへ移動する。
     * 引　数：なし
     * 戻り値：なし
     */
    onEventUserSelect_Selected : function(){
        var length = App.Page.thispage.dialogs.ProjectuserDlgSelect.fncGetProjectUsersSize() ;
        var select_multi_ids = {};
        for( var index=0 ; index<length ; index++ ){
            var id = App.Page.thispage.dialogs.ProjectuserDlgSelect.fncGetProjectUserAttribute(index, "projectuser_id") ;
            select_multi_ids[id] = App.Page.thispage.dialogs.ProjectuserDlgSelect.fncGetProjectUserAttribute(index, "select_multi") ;
        }
        
        for( var index=0 ; index<this.projectusers.length ; index++ ){
            this.projectusers[index].select_multi = select_multi_ids[this.projectusers[index].projectuser_id] ;
        }
        
        this.fncUpdateProjectUsers() ;
    },
    
    /*
     * 関数名：fncReset
     * 概　要：ダイアログ内容をリセットする
     * 引　数：なし
     * 戻り値：なし
     */
    fncReset: function()
    {
        if( this.dataparam['id'] == null || this.dataparam['id'] == "" ){
            Ext.get('dlg_evt_edit_destroy').dom.style.visibility = 'hidden' ;
        }
        else{
            Ext.get('dlg_evt_edit_destroy').dom.style.visibility = 'visible' ;
        }
        var form = Ext.get('dlg_evt_edit_form');
        form.dom.reset();
        //Form.reset('dlg_evt_edit_form');
        Ext.getCmp('dlg_evt_edit_comp_item_name').setValue('');
        Ext.get('dlg_evt_edit_eventusers_user_name').dom.innerHTML = "" ;
    },

    /*
     * 関数名：fncDataRead
     * 概　要：パラメータの内容で、データを読み込む
     * 引　数：なし
     * 戻り値：なし
     */
    fncDataLoad: function()
    {
        this.fncReset();
        try{
            Ext.get('dlg_evt_edit_base_id').dom.value = this.dataparam['base_id'] ;
            Ext.get('dlg_evt_edit_event_id').dom.value = "" ;
            Ext.get('dlg_evt_edit_comp_id').dom.value = this.dataparam['id'] ;
            Ext.get('dlg_evt_edit_comp_project_id').dom.value = this.dataparam['project_id'] ;
            Ext.get('dlg_evt_edit_comp_class_word1').dom.value = this.dataparam['class_word1'] ;
            Ext.get('dlg_evt_edit_comp_class_word2').dom.value = this.dataparam['class_word2'] ;
            Ext.get('dlg_evt_edit_comp_class_word3').dom.value = this.dataparam['class_word3'] ;
/*
            var cbobj =
            {
                success: this.onDataLoadSuccess ,
                failure: this.onDataLoadFail,
                scope: this
            } ;
*/
            var url = "";
            if( Ext.get('dlg_evt_edit_comp_id').dom.value == "" ){
              // 新規作成処理要求
              url = this.newurl ;
            }
            else{
              // 更新要求
              url = this.editurl ;
            }

      // 非同期リクエスト
      var options =
      {
        url: url,
        form: 'dlg_evt_edit_form',
        success: this.onDataLoadSuccess ,
        failure: this.onDataLoadFail,
        scope: this,
        method :'POST'
      } ;
      Ext.Ajax.request(options) ;

/*
            YAHOO.util.Connect.setForm('dlg_evt_edit_form') ;
            YAHOO.util.Connect.asyncRequest(
                'POST',
                url,
                cbobj
            ) ;
*/
    } catch(e) {
      alert(e.message);
    }
  
        return false ;
    },

    /*
     * 関数名：onDataLoadSuccess
     * 概　要：保存処理成功イベント。
     *         処理成功時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDataLoadSuccess : function(obj){
        var responseobj = Ext.util.JSON.decode(obj.responseText) ;

        var success = responseobj.success ;
        var message = responseobj.message ;
        if( success ){

            var resultobj = responseobj.result ;
            
            var event = resultobj.event ;
            var projectcomp = resultobj.projectcomp ;
            var projectusers = resultobj.projectusers ;
            var eventusers = resultobj.eventusers ;

            var eventuser_regist_id = {};

            // 設定済みのイベントユーザーのIDをキーに、ハッシュを生成
            if( eventusers != null ){
                for( var index=0 ; index<eventusers.length ; index++){
                    eventuser_regist_id[eventusers[index].projectuser_id] = true ;
                }
            }
            if( projectusers != null ){
                for( var index=0 ; index<projectusers.length ; index++){
                    if( eventuser_regist_id[projectusers[index].projectuser_id] ){
                        projectusers[index].select_multi = true ;
                    }
                    else{
                        projectusers[index].select_multi = false ;
                    }
                }
            }
            this.projectusers = projectusers ;
            this.fncUpdateProjectUsers() ;

            for ( var colname in event ){
                var id = 'dlg_evt_edit_event_' + colname;
                if (Ext.getCmp(id)) {
                    Ext.getCmp(id).setValue(event[colname]);
                } else if (Ext.get(id)) {
                    Ext.get(id).dom.value = event[colname];
                }
            }
/*
            for ( var colname in event ){
                setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event['+colname+']', event[colname] ) ;
            }
*/
            if( event["start_time"] == null || event["start_time"] == "" ){
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[start_time(4i)]', "" ) ;
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[start_time(5i)]', "" ) ;
                var h = '';
                var m = '';
            } else {
                //var tvalue = event["start_time"].split(' ');
                //var hm = tvalue[1].split(':') ;
                var hm = event["start_time"].split(':') ;
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[start_time(4i)]', hm[0] ) ;
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[start_time(5i)]', hm[1] ) ;
                var h = hm[0];
                var m = hm[1];
            }
            Ext.getCmp('dlg_evt_edit_event_start_time_4i').setValue(h);
            Ext.getCmp('dlg_evt_edit_event_start_time_5i').setValue(m);
            
            if( event["end_time"] == null || event["end_time"] == "" ){
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[end_time(4i)]', "" ) ;
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[end_time(5i)]', "" ) ;
                var h = '';
                var m = '';
            } else {
                //var tvalue = event["end_time"].split(' ');
                //var hm = tvalue[1].split(':') ;
                var hm = event["end_time"].split(':');
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[end_time(4i)]', hm[0] ) ;
                //setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_event[end_time(5i)]', hm[1] ) ;
                var h = hm[0];
                var m = hm[1];
            }
            Ext.getCmp('dlg_evt_edit_event_end_time_4i').setValue(h);
            Ext.getCmp('dlg_evt_edit_event_end_time_5i').setValue(m);
            
            for ( var colname in projectcomp ){
                var id = 'dlg_evt_edit_comp_' + colname;
                var col = Ext.getCmp(id);
                if (Ext.getCmp(id)) {
                    col.setValue(projectcomp[colname]);
                } else if (Ext.get(id)) {
                    Ext.get(id).dom.value = projectcomp[colname];
                }
            }
/*
            for ( var colname in projectcomp ){
                setFormElementValue( 'dlg_evt_edit_form', 'dlg_evt_edit_comp['+colname+']', projectcomp[colname] ) ;
            }
*/
         }
         else{
            alert(message) ;
         }
//         app_loadingEnd() ;
    },
    
    /*
     * 関数名：onDataLoadFail
     * 概　要：保存処理失敗イベント。
     *         処理失敗時の後処理を行う。
     * 引　数：obj      Object      サーバーレスポンスオブジェクト
     * 戻り値：なし
     */
    onDataLoadFail : function(obj){
        alert(obj.responseText) ;
//        app_loadingEnd() ;
    },

    /*
     * 関数名：fncInputCheck
     * 概　要：入力チェックを実施する。
     * 引　数：なし
     * 戻り値：boolean      (true:チェックOK、false:チェックNG)
     */
    fncInputCheck : function(){
        var even_id = Ext.get('dlg_evt_edit_event_id').dom.value ;
    if (even_id == "") {
      // イベント名
          var item_name = Ext.get('dlg_evt_edit_comp_item_name').dom.value ;
      if (item_name == '') {
        alert('イベント名は必須入力です。');
        return false;
      }
    }
    // 開始日時
        var start_date = Ext.get('dlg_evt_edit_event_start_date').dom.value ;
    if (start_date == '') {
      alert('開始日は必須入力です。');
      return false;
    }
    // 日付書式チェック
    var start_date_valid = this.fncValidDate(start_date);
    if (!start_date_valid) {
      alert('開始日が正しくありません。');
      return false;
    }

    var start_time = '' ;
    if (Ext.get('dlg_evt_edit_event_start_time_4i').dom.value != '') {
      start_time = start_date ;
      start_time += ' ' + Ext.get('dlg_evt_edit_event_start_time_4i').dom.value ;
      if (Ext.get('dlg_evt_edit_event_start_time_5i').dom.value != '') {
        start_time += ':' + Ext.get('dlg_evt_edit_event_start_time_5i').dom.value ;
      }
      else {
        start_time += ':00' ;
      }
      var start_time_valid = this.fncValidDateTime(start_time);
      if (!start_time_valid) {
        alert('開始時刻が正しくありません。');
        return false;
      }
    }else{
      alert('開始時刻は必須入力です。');
      return false;
    }
    var end_time = '' ;
    if (Ext.get('dlg_evt_edit_event_end_time_4i').dom.value != '') {
      end_time = start_date ;
      end_time += ' ' + Ext.get('dlg_evt_edit_event_end_time_4i').dom.value ;
      if (Ext.get('dlg_evt_edit_event_end_time_5i').dom.value != '') {
        end_time += ':' + Ext.get('dlg_evt_edit_event_end_time_5i').dom.value ;
      }
      else {
        end_time += ':00' ;
      }
      var end_time_valid = this.fncValidDateTime(end_time);
      if (!end_time_valid) {
        alert('終了時刻が正しくありません。');
        return false;
      }
    }else{
      alert('終了時刻は必須入力です。');
      return false;
    }
    if (start_time != '' && end_time != '') {
      var between_valid = this.fncBackToForthDateTime(start_time, end_time);
      if (!between_valid) {
//        alert('期間が正しくありません。');
        alert('終了時刻は開始時刻より後に設定してください。');
        return false;
      }
    }

        return true ;
    },
  
    fncUpdateProjectUsers : function(){
        var eventusers_name = "" ;
        for( var index=0 ; index<this.projectusers.length ; index++ ){
            var pu = this.projectusers[index] ;
            if( pu.select_multi ){
                if( eventusers_name !="" ) eventusers_name += "，" ;
                if( pu.select_single ){
                    eventusers_name += '' + pu.user_name + '(' + app_localized_message("label", "main_user_abb") + ')' ;
                }
                else{
                    eventusers_name += pu.user_name ;
                }
            }
        }
        Ext.get('dlg_evt_edit_eventusers_user_name').dom.innerHTML = eventusers_name ;
    },
    
    fncFormSetProjectUsers : function(){
        Ext.get('dlg_evt_edit_hidden_area').dom.innerHTML = "" ;
        for( var index=0 ; index<this.projectusers.length ; index++ ){
            var pu = this.projectusers[index] ;
            if( pu.select_multi ){
                //new Insertion.Bottom('dlg_evt_edit_hidden_area', '<input type="hidden" name="dlg_evt_edit_eventusers[projectuser_id][]" value="'+pu.projectuser_id+'">' ) ;
                var html = '<input type="hidden" name="dlg_evt_edit_eventusers[projectuser_id][]" value="'+pu.projectuser_id+'">';
                var obj = Ext.get('dlg_evt_edit_hidden_area');
                obj.insertHtml('beforeEnd', html);
            }
        }
    } 
});
//=============================
// 現在のページオブジェクトのdialogsメンバーに設定
//=============================
App.Page.thispage.dialogs.EventDlgIndex = new App.EventDlgIndex() ;
